<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>营销统计</title>
    <!-- 引入样式 -->
    <link rel="stylesheet" href="/css/index.css">
    <!--引入echarts-->
    <script src="/js/echarts.min.js"></script>
    <!--引入vue-->
    <script src="/js/vue.js"></script>
    <!-- 引入组件element-ui库 -->
    <script src="/js/index.js"></script>
    <!--引入axios库-->
    <script src="/js/axios.min.js"></script>
    <!--引入图表主题-->
    <script src="/js/chalk.js"></script>
    <style>
        canvas{
            border-radius:20px;
        }
        .el-dropdown-link {
            cursor: pointer;
            color: #409EFF;
        }
        .el-icon-arrow-down {
            font-size: 12px;
        }
    </style>
</head>
<body>
<div id="app">
    <div style="margin-left: 0px;">
            <el-date-picker
                    v-model="monthDay"
                    type="month"
                    @change="changeMonth"
                    placeholder="选择月">
            </el-date-picker>
        <template>
            <el-select v-model="value" placeholder="请选择要查询的景区">
                <el-option
                        v-for="item in options"
                        :key="item.name"
                        :label="item.name"
                        :value="item.name"
                        @click.native="changeScenic">
                </el-option>
            </el-select>
        </template>
    </div>
    <!-- 为 ECharts 准备一个定义了宽高的 DOM -->
    <div id="main" style="width: 860px;height:500px;margin:auto;position: relative;top:100px"></div>
</div>
<script type="text/javascript">
    var app =new Vue({
        el: "#app",
        data: function () {//date数据
            return {
                monthDay:'',
                scenicName:'',
                xdata:[],//定义x轴数据集合
                ydata:[], //y轴添加订单数据
                options:[],//景区下拉框
                value:'',
            }
        },
        created: function () { //初始化方法 类似于jquery  $({})
            //给当前日期选择框初始化日期为当前月 不选择时，默认显示当前月份
            let date = new Date();
            //如果当前月份加上1小于10说明月份是个位 前面拼接上一个0
            // alert(date.getMonth())//比当前月份小1
            this.monthDay=date.getFullYear()+'-'+((date.getMonth()+1)<10?'0'+(date.getMonth()+1):(date.getMonth()+1));
            //在初始化时，调用加载数据方法
            this.scenicName='少林寺'//默认查询少林寺
            this.loadData();
        },
        methods: { //使用的所有方法
            //封装加载数据的方法   初始化和年月发生改变时，都可以调用
            loadData(){
                //使用axios发请求到后台方法
                var _this = this;
                //赋值 axios官网代码
                axios.post('/RevenueStatisticsController/queryByScenicAndOrder?monthDay='+this.monthDay+'&scenicName='+this.scenicName)  //指定请求的url及参数  get
                    .then(function (response) {  //正确返回对象的处理
                        console.log(JSON.stringify(response));
                        //判断返回值是否正确
                        if(response.data.code==200){
                            //当加载数据方法请求正确时，执行echarts显示
                            //给图片中的数据动态赋值
                            _this.jsonDataList = response.data.data;
                            // alert( JSON.stringify(_this.jsonDataList))
                           _this.showDatas();
                            // _this.startInterval();//启动定时器 调用定时器的方法
                        }

                    });
                axios.get('/scenic/queryAll') //请求的url
                    .then(function (response) {//回调函数
                        //前端控制台打印  response 是json对象
                        console.log(response);
                        console.log(JSON.stringify(response));
                        //response获取后台数据时，一定加data  response.data相当于从响应的body中获取
                        if(response.data.code==200){
                            //这里面直接写this相当于axios对象 不是vue
                            // this.tableData = response.data.data.list; //错误的
                            _this.options = response.data.data;
                        }
                    })
                    .catch(function (error) {//异常处理
                        console.log(error);
                    });
            },
            //年月发生变化时的方法
            changeMonth(v) {
                // alert(v);
                let year = v.getFullYear();
                let month = v.getMonth()+1;
                this.monthDay = year+'-'+(month<10?('0'+month):month);
                // alert(this.monthDay);
                //月发生变化时，给monthDay重新赋值后，再次执行加载数据方法
                this.loadData();
            },
            changeScenic() {
                // alert(this.value);
                this.scenicName =this.value//将下拉框中的值赋给scenicName
                // alert(JSON.stringify(this.scenicName));
                //景区发生变化时，给monthDay重新赋值后，再次执行加载数据方法
                this.loadData();
            },
            //写一个每页显示五条数据的方法
            showDatas(){
                this.xdata=[];
                this.ydata=[];
                 // alert(JSON.stringify(this.jsonDataList))
                for (let i = 0; i < this.jsonDataList.length; i++) {
                    //拿出循环的每个对象给jsonDataListElement
                    const jsonDataListElement = this.jsonDataList[i];

                    //给xdata  ydata ...赋值
                    this.xdata.push(jsonDataListElement.monthDay);
                    this.ydata.push(jsonDataListElement.turnover);
                    // alert(JSON.stringify(this.ydata))
                }
                //显示图表
                this.drawChart();
            },
            //显示图表方法
            drawChart() {
                // 基于准备好的dom，初始化echarts实例
                var myChart = echarts.init(document.getElementById('main'), 'chalk');//引入主题
                // 指定图表的配置项和数据
                var option = {
                    title: {
                        text: '营销统计',
                        //副标题文本
                        subtext: 'Fake Data',
                        textStyle: {//标题样式
                            fontSize: 30,
                            // color:'white',
                        },
                        left: 40,
                        top: 10
                    },
                    grid: {//设置图表的位置
                        // show:true,//显示网格
                        left: 100,
                        top: 100,
                        width: 700,
                        height: 300
                    },
                    tooltip: {
                        trigger: 'axis'//当鼠标放到数据条的轴上，数据内容就会显示
                    },
                    legend: {//图例
                        data: [this.scenicName],
                        top: 15,
                        textStyle: {
                            fontSize: 15
                        }

                    },
                    toolbox: {//工具按钮
                        show: true,
                        feature: {
                            //数据视图
                            dataView: {show: true, readOnly: false},
                            //图表类型切换 这里是折线图和柱状图切换
                            magicType: {show: true, type: ['line', 'bar']},
                            //重置功能 重置修改的数据
                            restore: {show: true},
                            //导出图片
                            saveAsImage: {show: true}
                        },
                        textStyle: {},
                        right: 100,
                        top: 15

                    },
                    calculable: true,
                    xAxis: [
                        {
                            type: 'category',
                            // prettier-ignore
                            data: this.xdata,
                            boundaryGap: false,//取消与y轴的间隔
                        }
                    ],
                    yAxis: [
                        {
                            type: 'value',
                            scale: true
                        }
                    ],
                    series: [
                        {
                            name: this.scenicName,
                            type: 'line',
                            data: this.ydata,
                            barWidth: 44,
                            markPoint: {
                                data: [
                                    {type: 'max', name: 'Max'},
                                    {type: 'min', name: 'Min'}
                                ]
                            },
                            markLine: {
                                data: [{type: 'average', name: 'Avg'}]
                            }
                        },

                    ]
                };
                // 使用刚指定的配置项和数据显示图表。
                myChart.setOption(option);
            },
        }
    });
</script>
</body>
</html>